# 列表属于可变序列,可以任意修改列表中的元素
# 元组属于不可变序列,不能修改元组中的元素,
# 因此,元组没有增加元素,修改元素,删除元素相关的方法

# 元组的创建
"""
a = (1)
print(type(a)) # int
"""
# 创建仅有一个元素的元组，必须带个逗号
"""
a1 = (1,)
print(type(a1)) # tuple
"""
# 通过tuple创建元组
"""
b = tuple() # 创建了一个空的元组
print(b)
b1 = tuple("abc")
print(b1) # ('a', 'b', 'c')
b2 = tuple(range(3))
print(b2) # (0, 1, 2)
b3 = tuple([2,3,4])
print(b3) # (2, 3, 4)
b4 = (55,66,77)
print(b4)
"""
# 索引以及切片的概念 和列表、字符串一致
"""
a = (20,30,9,8,3)
print(a[0]) # 20
print(a[1]) # 30
print(a[2]) # 9
print(a[3]) # 8
print(a[4]) # 3
print(a[-1]) # 3
print(a[:3]) # (20,30,9)
print(a[::-1]) # (3,8,9,30,20)
"""
# 获取元素的下表和计数
a=(20,10,30,9,8,9,9,9)
"""
print(a.index(9)) # 3
print(a.count(9)) # 统计9出现的次数：4
"""
# 元组不可以被修改
"""
a[0] = 100 # 错误
print(a) # TypeError: 'tuple' object does not support item assignment
"""
# 元组的排序 sorted里的reverse为True降序
"""
print(sorted(a)) # 返回的是列表对象
print(tuple(sorted(a,reverse=True))) # 转成元组呢？
"""
# 元组的(长度)len,(最大)max,(最小)min,(总和)sum
"""
a2=(20,10,30,9,8)
print(len(a2)) 
print(sum(a2))
print(min(a2))
print(max(a2))
"""

# zip对象
# zip(列表1,列表2,......)
# 将多个列表对于位置的元素组合成为元组,并返回这个zip对象
"""
b = [10,20,30]
c = [40,50,60]
d = [60,80,90]
b1 = zip(b,c,d)
print(list(b1))
"""

# list1 = [i for i in range(9)] # 列表推导式
# 生成器推导式创建元组
s = (x*2 for x in range(5))
"""
x*2 = 需要返回的值，也是循环变量
for x in range(5)： 从0开始循环到4结束
"""
# (0,2,4,6,8)
print(s) # 返回的是生成器地址值
print(list(s)) # 列表：[0, 2, 4, 6, 8]
"""
好比一个篮子里面装的鸡蛋，前面一个人把鸡蛋取完了，后一个人取就是空的
"""
print(tuple(s)) # (0，2，4，6，8)
"""
for i in s:
    # 因为for 循环替我们做了一个next的事儿
    # 所以每次都会访问下一个元素
    # 最后一个不报错，因为它内部处理了异常
    print(i)
"""
"""
# 访问生成器的值对象 ，通过next访问下一个对象
print(s.__next__()) # 0
# s.__next__()
print(s.__next__()) # 2
print(s.__next__()) # 4
print(s.__next__()) # 6
print(s.__next__()) # 8
# print(s.__next__()) # ? StopIteration
"""





